package com.example.thread.pool;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * ScheduledThreadPool
 * 创建一个定长线程池，支持定时及周期性任务执行
 */

public class ScheduledThreadPool {
    public static void main(String[] args) {
        //
        ScheduledExecutorService service = Executors.newScheduledThreadPool(10);
        // 延迟10秒执行
        service.schedule(() -> {
            System.out.println("延迟10秒执行: " + System.currentTimeMillis());
        }, 10, TimeUnit.SECONDS);

        // 周期性执行任务  开始时间点：执行开始的时间
        // scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
        // command - 要执行的任务
        // initialDelay - 首次执行的延迟时间
        // period - 连续执行之间的时间间隔
        // unit - initialDelay和period参数的时间单位
        service.scheduleAtFixedRate(() -> {
            System.out.println("执行周期性任务: " + System.currentTimeMillis());
        }, 10, 10, TimeUnit.SECONDS);

        /**
         * 周期性执行任务  开始时间点：执行结束的时间
         * scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
         * command - 要执行的任务
         * initialDelay - 首次执行的延迟时间
         * delay - 相邻执行的任务之间的时间间隔
         * unit - initialDelay和delay参数的时间单位
         */
        service.scheduleWithFixedDelay(() -> {
            System.out.println("执行周期性任务: " + System.currentTimeMillis());
        }, 10, 10, TimeUnit.SECONDS);
    }


}
